/**
 * 金牛座 - Oracle数据库配置示例
 * 本配置文件展示了使用Oracle数据库时的完整配置选项
 */
module.exports = {
    /**
     * 数据库配置
     * 指定数据库类型和连接信息
     */
    database: {
        // 数据库类型: 'oracle' 表示Oracle数据库
        type: 'oracle',

        // 数据库连接信息
        connection: {
            // 连接字符串方式（首选）
            connectString: 'localhost:1521/ORCLPDB1',  // 格式: host:port/service_name

            // 或者使用独立参数
            // host: 'localhost',         // 数据库主机名
            // port: 1521,                // Oracle默认端口
            // database: 'ORCLPDB1',      // 服务名(SID)

            user: 'system',             // 数据库用户名
            password: 'your_password',  // 数据库密码

            // 可选: 连接池配置
            pool: {
                min: 2,                   // 最小连接数
                max: 10,                  // 最大连接数
                increment: 1,             // 增量连接数
                timeout: 60               // 连接超时(秒)
            },

            // 可选: 其他Oracle特定选项
            options: {
                autoCommit: true,         // 是否自动提交
                fetchAsString: ['DATE', 'TIMESTAMP', 'CLOB'], // 作为字符串获取的类型
                outFormat: 'OBJECT'       // 输出格式('ARRAY'或'OBJECT')
            }
        },

        // 调试模式，设置为true时将输出SQL语句
        debug: false,

        // Oracle特定配置
        oracle: {
            // 默认Schema (通常与用户名一致，Oracle中默认大写)
            schema: 'SYSTEM',

            // 表名是否强制大写(Oracle默认是大写)
            forceUppercase: true,

            // 是否启用Oracle事务支持
            enableTransaction: true,

            // 是否使用简单的表名(不含Schema前缀)
            useSimpleTableNames: false,

            // 是否检索注释
            fetchComments: true,

            // 是否启用Oracle数据库链接支持
            enableDbLinks: false
        }
    },

    /**
     * 表配置
     * 控制要包含或排除哪些表
     */
    tables: {
        // 需要包含的表 (使用正则表达式)
        include: [
            '.*'                       // 默认包含所有表
        ],

        // 需要排除的表 (使用正则表达式)
        exclude: [
            'SYS_.*',                  // 排除系统表
            'DBA_.*',                  // 排除DBA管理表  
            'ALL_.*',                  // 排除ALL视图
            'USER_.*',                 // 排除USER视图
            'V\\$.*',                  // 排除性能视图
            '.*_TEMP',                 // 排除临时表
            '.*_LOG'                   // 排除日志表
        ],

        // 特定表的自定义属性
        custom: {
            // 员工表的自定义配置
            'EMPLOYEES': {
                title: '员工信息',       // 表的显示标题
                description: '存储公司所有员工的基本信息', // 表描述
                displayField: 'EMPLOYEE_NAME', // 表的显示字段
                ordering: 1,             // 表的显示顺序
                excludeFields: ['SSN', 'PASSWORD'] // 排除敏感字段
            },

            // 订单表的自定义配置
            'ORDERS': {
                title: '订单信息',       // 表的显示标题
                description: '存储客户订单记录', // 表描述
                displayField: 'ORDER_NUMBER', // 表的显示字段
                ordering: 2,             // 表的显示顺序

                // 自定义字段属性
                customFields: {
                    'TOTAL_AMOUNT': {
                        label: '订单金额',   // 字段显示标签
                        description: '订单的总金额(元)', // 字段描述
                        rules: 'required|numeric|min:0' // 验证规则
                    }
                }
            }
        }
    },

    /**
     * 输出配置
     * 控制生成的文件夹和文件
     */
    output: {
        // 基础输出目录
        baseDir: './output',

        // 文档输出目录 (相对于baseDir)
        docsDir: 'tables',

        // 类型定义输出目录 (相对于baseDir)
        typesDir: 'types',

        // 示例输出目录 (相对于baseDir)
        examplesDir: 'examples',

        // 是否清除输出目录
        clean: false,

        // 是否保留现有文件
        preserveFiles: true,

        // 是否创建目录
        createDirs: true
    },

    /**
     * 文档生成配置
     * 控制Markdown文档输出选项
     */
    docGeneration: {
        // 文档格式 (目前支持 'markdown')
        format: 'markdown',

        // 是否包含表的详细信息
        includeTableDetails: true,

        // 是否包含字段的详细信息
        includeFieldDetails: true,

        // 是否包含索引信息
        includeIndexes: true,

        // 是否包含表关系信息
        includeRelations: true,

        // 是否包含API示例
        includeAPIExamples: true,

        // 是否包含额外的表注释
        includeComments: true,

        // 表标题模板 (支持Handlebars语法)
        titleTemplate: '{{tableComment}} ({{tableName}})'
    },

    /**
     * 类型生成配置
     * 控制TypeScript类型定义生成
     */
    typeGeneration: {
        // 接口前缀
        interfacePrefix: 'I',

        // 是否使用字符串类型表示大整数
        useStringForBigInt: true,

        // 是否生成只读属性
        readonly: false,

        // 是否生成查询参数接口
        generateQueryInterfaces: true,

        // 是否生成分页结果接口
        generatePaginationInterfaces: true,

        // 是否生成常量定义
        generateConstants: true,

        // 是否生成API路径
        generateApiPaths: true,

        // 自定义类型映射 (Oracle类型 => TypeScript类型)
        typeMapping: {
            // 数值类型
            'NUMBER': 'number',
            'NUMBER(*,0)': 'number',   // 整数
            'NUMBER(*,*)': 'number',   // 小数
            'INTEGER': 'number',
            'INT': 'number',
            'SMALLINT': 'number',
            'FLOAT': 'number',

            // 字符类型
            'CHAR': 'string',
            'NCHAR': 'string',
            'VARCHAR2': 'string',
            'NVARCHAR2': 'string',
            'CLOB': 'string',
            'NCLOB': 'string',
            'LONG': 'string',

            // 日期/时间类型
            'DATE': 'Date',
            'TIMESTAMP': 'Date',
            'TIMESTAMP WITH TIME ZONE': 'Date',
            'TIMESTAMP WITH LOCAL TIME ZONE': 'Date',

            // 二进制类型
            'BLOB': 'Buffer',
            'RAW': 'Buffer',
            'LONG RAW': 'Buffer',

            // 布尔类型 (Oracle没有原生布尔类型，通常使用NUMBER(1))
            'NUMBER(1)': 'boolean',

            // 特殊类型
            'ROWID': 'string',
            'UROWID': 'string',

            // LOB类型
            'BFILE': 'any'
        }
    },

    /**
     * 缓存配置
     * 控制数据缓存选项
     */
    cache: {
        // 是否启用缓存
        enabled: true,

        // 缓存目录
        cacheDir: '.cache',

        // 缓存生存时间(秒)
        ttl: 3600
    },

    /**
     * 日志配置
     * 控制日志输出
     */
    logging: {
        // 日志级别: 'debug', 'info', 'warn', 'error'
        level: 'info',

        // 是否在控制台输出
        console: true,

        // 是否记录到文件
        file: true,

        // 日志文件路径
        filePath: 'logs/jinniuzhuo.log',

        // 是否包含时间戳
        timestamp: true
    },

    /**
     * 性能配置
     * 控制生成性能选项
     */
    performance: {
        // 是否启用并发表处理
        concurrentTables: true,

        // 最大并发数
        maxConcurrent: 5,

        // 是否启用增量生成
        incrementalGeneration: true
    },

    /**
     * 高级配置
     * 自定义模板和扩展选项
     */
    advanced: {
        // 自定义模板目录
        templatesDir: 'my-templates',

        // 模板引擎 (默认: 'handlebars')
        templateEngine: 'handlebars',

        // HTTP API选项
        httpApi: {
            // 基础URL前缀
            baseUrl: '/jinniuzhuo/api',

            // 是否启用CORS
            cors: true,

            // 是否生成完整API文档
            generateSwagger: true,

            // Swagger文档输出路径
            swaggerPath: 'api-docs/swagger.json'
        },

        // 是否启用Oracle特定功能
        oracleFeatures: {
            // 是否支持PL/SQL函数调用
            plsqlFunctions: true,

            // 是否支持Oracle序列
            sequences: true,

            // 是否支持同义词
            synonyms: false,

            // 是否包含物化视图
            includeMaterializedViews: false,

            // 是否启用LOB类型支持
            lobSupport: true,

            // 是否支持XML类型操作
            xmlTypeSupport: false
        }
    }
}; 